class Trie:
def __init__(self, flag = False):
self.letters = [0] * 27
self.flag = flag
class Solution:
def addProducts(self, word, root):
for letter in word:
if root.letters[ord(letter) - 97]:
root = root.letters[ord(letter) -97]
else:
root.letters[ord(letter) - 97] = Trie()
root = root.letters[ord(letter) - 97]
root.flag = True
def search(self, root, creating):
a = []
if not root:
return a
if root.flag:
a.append(creating)
for i in range(len(root.letters)):
if root.letters[i]:
a += self.search(root.letters[i], creating + chr(i + 97) )
return a
def suggestedProducts(self, products: List[str], searchWord: str) -> List[List[str]]:
root = Trie()
ans = []
for product in products:
self.addProducts(product, root)
for i in range(len(searchWord)):
root_ptr = root
for letter in searchWord[0: i+1]:
ind = ord(letter) - 97
root_ptr = root_ptr.letters[ind]
if not root_ptr:
break
a = self.search(root_ptr, searchWord[0:i+1])
a.sort()
ans.append(a[:3])
return ans
53. Maximum Subarray | 1527A. And Then There Were K |
1689. Partitioning Into Minimum Number Of Deci-Binary Numbers | 318. Maximum Product of Word Lengths |
448. Find All Numbers Disappeared in an Array | 1155. Number of Dice Rolls With Target Sum |
415. Add Strings | 22. Generate Parentheses |
13. Roman to Integer | 2. Add Two Numbers |
515. Find Largest Value in Each Tree Row | 345. Reverse Vowels of a String |
628. Maximum Product of Three Numbers | 1526A - Mean Inequality |
1526B - I Hate 1111 | 1881. Maximum Value after Insertion |
237. Delete Node in a Linked List | 27. Remove Element |
39. Combination Sum | 378. Kth Smallest Element in a Sorted Matrix |
162. Find Peak Element | 1529A - Eshag Loves Big Arrays |
19. Remove Nth Node From End of List | 925. Long Pressed Name |
1051. Height Checker | 695. Max Area of Island |
402. Remove K Digits | 97. Interleaving String |
543. Diameter of Binary Tree | 124. Binary Tree Maximum Path Sum |